//
// Created by user on 20-5-5.
//

#ifndef _SOFTIRQ_H_
#define _SOFTIRQ_H_

#include "../GeneralLibrary/Lib.h"

/******************** 宏变量定义区 *************************/
#define TIMER_SIRQ    (1 << 0)

/******************** 结构体重命名区 *************************/

typedef struct SoftIRQStruct SoftIRQ;

/******************** 结构体定义区 *************************/

// 软中断请求结构体
struct SoftIRQStruct {
    void (*action)(void *data); // 软中断动作函数

    void *data;                 // 软中断要传递的数据
};

/******************** 外部变量声明区 *************************/

// 软中断状态
extern unsigned long softIRQStatus;

// 软中断向量数组
extern SoftIRQ softIRQCVector[64];

/******************** 函数声明区 *************************/

/**
 * 软中断初始化
 */
void softIRQInit();

/**
 * 设置软中断状态
 * @param status
 */
void setSoftIRQStatus(unsigned long status);

/*
 * 获取软中断状态
 */
unsigned long getSoftIRQStatus();

/**
 * 注册软中断
 * @param nr 中断号
 * @param action 动作函数
 * @param data 要传输的数据
 */
void registerSoftIRQ(int nr, void (*action)(void *data), void *data);

/**
 * 卸载软中断
 * @param nr 中断号
 */
void unRegisterSoftIRQ(int nr);

/**
 * 软中断处理函数，根据中断状态变量来执行对应的方法
 */
void doSoftIRQ();

#endif //_SOFTIRQ_H_
